<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="app">
      <h2>props的校验</h2>
      <child
        name="zhangsan"
        :age="20"
        :height="170"
        :weight="180"
        sex="男"
        phone="13856785678"
      ></child>
    </div>

    <script src="./lib/Vue3.js"></script>
    <script>
      const { createApp } = Vue;

      /*
        允许写的所有类型
          String
          Number
          Boolean
          Array
          Object
          Date
          Function
          Symbol
      */

      const Child = {
        props: {
          // 只校验props的数据类型
          // name: String,
          // 等价于
          name: {
            type: String,
          },
          // required: true 表示必须传
          age: {
            type: Number,
            required: true,
          },
          // 数组表示类型的多种可能
          height: {
            type: [String, Number],
          },
          // default表示props的默认值
          weight: {
            type: Number,
            default: 200,
          },
          // 自定义的校验规则
          sex: {
            // type: String,
            validator(val) {
              // 通过这个函数返回的true或者false，来判断传入的内容是否符合要求
              return ["男", "女"].includes(val);
            },
          },
          phone: {
            validator(val) {
              const reg = /^[1][3,4,5,7,8][0-9]{9}$/;
              return reg.test(val);
            },
          },
        },
        template: `
          <div>child子组件 - {{ name }} - {{ age }} - {{ height }} - {{ weight }} - {{ sex }}</div>
        `,
      };

      createApp({
        data() {
          return {};
        },
        components: {
          Child,
        },
      }).mount("#app");
    </script>
  </body>
</html>
